ديف أوبس

استيثاق كلمة السر Nginx Ubuntu

إعداد استيثاق كلمة السر مع خادوم Nginx على Ubuntu: دليل شامل ومفصل

في سياق تأمين خدمات الويب، يمثل استخدام استيثاق كلمة السر (Basic Authentication) إحدى أبسط وأكثر الطرق فعالية لحماية المسارات والموارد الحساسة على الخادوم. يعتبر Nginx أحد أكثر خوادم الويب استخداماً واستقراراً، ويُستخدم بشكل واسع كخادوم HTTP وProxy عكسي Reverse Proxy. ومن خلال إعداد استيثاق كلمة السر على خادوم Nginx في نظام Ubuntu، يمكن للمستخدمين التحكم في الوصول إلى مواقعهم أو واجهاتهم الإدارية بكل بساطة، دون الحاجة إلى إعداد نظم معقدة للمصادقة.

يتناول هذا المقال بشكل مفصل جميع الخطوات اللازمة لإعداد استيثاق كلمة السر مع خادوم Nginx على نظام Ubuntu، مع شرح شامل للمتطلبات والأوامر والملفات المستخدمة. كما يتضمن ملاحظات أمنية وتوصيات لتحسين الحماية.


المتطلبات الأساسية

لإتمام هذه العملية بنجاح، يجب توفر بعض المتطلبات الأساسية:

  • نظام تشغيل Ubuntu (يفضل إصدار LTS حديث مثل 20.04 أو 22.04).

  • صلاحيات الجذر (root) أو استخدام الأمر sudo.

  • خادوم Nginx مثبت ومُشغل.

  • معرفة بأساسيات أوامر سطر الأوامر في Linux.

  • حزمة apache2-utils لتوليد ملفات كلمات المرور المشفرة.


المرحلة الأولى: تثبيت الحزم المطلوبة

الخطوة الأولى تتمثل في تثبيت حزمة apache2-utils، وهي الحزمة التي تحتوي على الأداة htpasswd المسؤولة عن إنشاء ملفات كلمات المرور المشفرة.

bash
sudo apt update sudo apt install apache2-utils

المرحلة الثانية: إنشاء ملف كلمات المرور

يقوم Nginx باستخدام ملف يحتوي على قائمة بأسماء المستخدمين وكلمات المرور الخاصة بهم، تكون هذه الأخيرة مشفرة لضمان الأمان. لإنشاء هذا الملف، يمكن تنفيذ الأمر التالي:

bash
sudo htpasswd -c /etc/nginx/.htpasswd admin
  • الخيار -c يُستخدم فقط عند إنشاء الملف لأول مرة. إذا كنت تريد إضافة مستخدمين آخرين لاحقاً، أزل هذا الخيار.

  • admin هو اسم المستخدم الذي ترغب في إنشائه.

سيُطلب منك إدخال كلمة المرور وتأكيدها. بعد ذلك، سيتم إنشاء ملف .htpasswd يحتوي على اسم المستخدم وكلمة المرور المشفرة.

لإضافة مستخدم جديد لاحقاً:

bash
sudo htpasswd /etc/nginx/.htpasswd user2

المرحلة الثالثة: تكوين Nginx لاستخدام الاستيثاق

الخطوة التالية هي تعديل ملف إعدادات Nginx لإضافة التوجيهات الخاصة بالاستيثاق. يمكن تطبيق الحماية على مستوى الخادوم، أو مجلد معين، أو موقع (location) محدد.

مثال على تكوين الحماية لمجلد محدد

nginx
server { listen 80; server_name example.com; location /protected/ { auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd; # إعدادات إضافية try_files $uri $uri/ =404; } }
  • auth_basic: يحدد رسالة التوضيح التي تظهر في نافذة تسجيل الدخول.

  • auth_basic_user_file: يحدد مسار ملف كلمات المرور.

إعادة تحميل إعدادات Nginx

بعد الانتهاء من تعديل الملف، من الضروري التحقق من صحة التكوين وإعادة تحميل الخدمة:

bash
sudo nginx -t sudo systemctl reload nginx

المرحلة الرابعة: اختبار النظام

عند زيارة المسار المحمي (مثل http://example.com/protected/)، يجب أن تظهر نافذة منبثقة تطلب اسم المستخدم وكلمة المرور. في حال كانت البيانات صحيحة، يُسمح بالوصول إلى المحتوى، وإلا فسيتم رفض الدخول.


توصيات وملاحظات أمنية

1. استخدام HTTPS

من الضروري للغاية تأمين الاتصال باستخدام بروتوكول HTTPS، لأن استيثاق Basic Authentication لا يشفر البيانات في حد ذاتها، بل يعتمد على أمان طبقة النقل. بدون HTTPS، يمكن اعتراض كلمات المرور.

2. صلاحيات ملف .htpasswd

يجب تقييد صلاحيات الملف لضمان عدم قراءته من طرف غير مصرح به:

bash
sudo chmod 640 /etc/nginx/.htpasswd sudo chown root:www-data /etc/nginx/.htpasswd

3. تسجيل الدخول الفاشل

لتحسين الأمان، يُنصح بإعداد أنظمة كشف الدخول الفاشل مثل Fail2ban لتعطيل الوصول من عناوين IP تقوم بمحاولات متكررة.


جدول مقارنة بين طرق الاستيثاق المختلفة في Nginx

نوع المصادقة الأمان التشفير يتطلب قاعدة بيانات سهولة الإعداد حالات الاستخدام
Basic Authentication منخفض إلى متوسط (بدون HTTPS) يعتمد على HTTPS لا سهل جداً حماية مجلدات بسيطة
JWT (JSON Web Token) عالي نعم نعم متوسط API و SPA
OAuth2 عالي جداً نعم نعم معقد تطبيقات ويب كبيرة
Client Certificate عالي نعم لا معقد أنظمة مؤسسات عالية الأمان

التعامل مع أكثر من مستخدم

يمكنك إدارة عدة مستخدمين داخل نفس الملف .htpasswd. عند استخدام htpasswd بدون خيار -c، سيتم إضافة المستخدم إلى الملف الحالي أو تعديل كلمة مروره في حال وجوده مسبقاً.


تقييد عدد المحاولات باستخدام Nginx

بالإضافة إلى استخدام أدوات خارجية مثل fail2ban، يمكن استخدام وحدات Nginx مثل limit_req لتقييد عدد الطلبات:

nginx
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /protected/ { limit_req zone=one burst=5; auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; } } }

السجلات والتتبع

يمكن تتبع محاولات الدخول من خلال سجل الدخول الخاص بـ Nginx، وعادة ما يوجد في:

lua
/var/log/nginx/access.log /var/log/nginx/error.log

يساعد تحليل هذه السجلات على اكتشاف الأنشطة المشبوهة ومحاولات الاختراق.


إزالة أو تعديل الاستيثاق لاحقاً

في حال قررت لاحقاً إزالة الحماية أو تعديلها، يكفي حذف أو تعديل التوجيهات التالية من ملف إعدادات Nginx:

nginx
auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd;

ثم تنفيذ:

bash
sudo nginx -t sudo systemctl reload nginx

التوافق مع أدوات DevOps

يُمكن دمج ملفات .htpasswd مع أدوات إدارة التهيئة مثل Ansible أو Chef أو Terraform باستخدام مهام تلقائية لإنشاء الملفات أو إدارتها. كما يمكن تخزين كلمات المرور مشفرة ضمن ملفات سرية (Secrets) داخل بيئات CI/CD لتحديث الوصول الديناميكي.


الخلاصة التقنية

يُعد إعداد استيثاق كلمة السر باستخدام Basic Authentication في Nginx وسيلة فعالة وسهلة لتأمين المسارات والخدمات على خوادم Ubuntu. من خلال إنشاء ملف .htpasswd وتحديث ملفات إعدادات Nginx بشكل سليم، يمكن فرض الحماية دون الحاجة إلى أنظمة معقدة. ومع ذلك، يبقى الاعتماد على HTTPS ونظام تسجيل المحاولات الفاشلة من أهم العوامل لتعزيز الأمان وتجنب الهجمات الشائعة كالهجمات القائمة على التخمين (Brute-force). إن الجمع بين سهولة التهيئة وفعالية الحماية يجعل من هذه الآلية خياراً مناسباً لكثير من الحالات التي تتطلب أماناً بسيطاً وسريع النشر.


المراجع: